/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.model.FaceDraft;
import com.yami.shop.common.util.PageParam;

import java.util.List;

/**
 * 草稿单服务
 * @author AI Assistant
 */
public interface FaceDraftService extends IService<FaceDraft> {

    /**
     * 根据用户ID和状态获取草稿单列表
     * @param userId 用户ID
     * @param status 状态
     * @return 草稿单列表
     */
    List<FaceDraft> listByUserIdAndStatus(String userId, Integer status);

    /**
     * 根据用户ID和状态统计草稿单数量
     * @param userId 用户ID
     * @param status 状态
     * @return 草稿单数量
     */
    Integer countByUserIdAndStatus(String userId, Integer status);

    /**
     * 更新草稿单状态
     * @param draftId 草稿单ID
     * @param status 状态
     */
    void updateStatus(Long draftId, Integer status);

    /**
     * 保存草稿单
     * @param faceDraft 草稿单
     */
    void saveFaceDraft(FaceDraft faceDraft);

    /**
     * 更新草稿单
     * @param faceDraft 草稿单
     */
    void updateFaceDraft(FaceDraft faceDraft);

    /**
     * 删除草稿单
     * @param draftId 草稿单ID
     */
    void deleteFaceDraft(Long draftId);

    /**
     * 分页查询草稿单
     * @param page 分页参数
     * @param userId 用户ID
     * @param status 状态
     * @return 分页结果
     */
    IPage<FaceDraft> pageByUserIdAndStatus(PageParam<FaceDraft> page, String userId, Integer status);

    /**
     * 草稿转为设计稿（设置排单状态为未排单）
     * @param draftId 草稿ID
     * @param userId 用户ID
     */
    void convertToDesign(Long draftId, String userId);

    /**
     * 用户申请排单
     * @param draftId 草稿ID
     * @param userId 用户ID
     */
    void applySchedule(Long draftId, String userId);

    /**
     * 管理端确认排单
     * @param draftId 草稿ID
     * @param orderAmount 订单金额
     * @return 生成的订单ID
     */
    Long confirmSchedule(Long draftId, java.math.BigDecimal orderAmount);

    /**
     * 根据用户ID和排单状态查询草稿单
     * @param userId 用户ID
     * @param scheduleStatus 排单状态
     * @return 草稿单列表
     */
    List<FaceDraft> listByScheduleStatus(String userId, Integer scheduleStatus);

    /**
     * 分页查询草稿单（包含排单状态）
     * @param page 分页参数
     * @param userId 用户ID
     * @param draftStatus 草稿状态
     * @param scheduleStatus 排单状态
     * @return 分页结果
     */
    IPage<FaceDraft> pageByStatus(PageParam<FaceDraft> page, Long userId, Integer draftStatus, Integer scheduleStatus);
}
